Skip to main content

第 12 章:完整介紹 Git command

init 將一個目錄轉變成 Git 倉庫

git init
#儲存庫(Repository)初始化:在當前目錄中初始化一個新的儲存庫,這將在目錄中創建一個隱藏的 .git 子目錄,並將其設置為 Git 存儲庫

clone 從遠程儲存庫複製完整代碼到本機

git clone 實際上是一個封裝了其他幾個命令的命令。 它創建了一個新目錄,切換到新的目錄,然後 git init 來初始化一個空的 Git 倉庫, 然後為你指定的 URL 添加一個(默認名稱為 origin 的)遠程倉庫(git remote add),再針對遠程倉庫執行 git fetch,最後通過 git checkout 將遠程倉庫的最新提交檢出到本地的工作目錄。

git clone $URL

status 檢查儲存庫狀態

git status 命令會顯示工作區及暫存區域中不同狀態的文件。 其中包含了已修改但未暫存,或已經暫存但沒有提交的文件。 在一般的顯示形式中,它會給你一些如何在這些暫存區之間移動文件的提示。

git status
#顯示當前儲存庫狀態,包括已修改的文件和未跟蹤的文件

add 將內容從工作目錄添加到暫存區

git add 命令將內容從工作目錄添加到暫存區(或稱為索引 index 區),以備下次提交。 當 git commit 命令執行時,默認情況下它只會檢查暫存區域,因此 git add 是用來確定下一次提交時快照的樣子的。

git add $FILENAME
#將當前工作目錄的修改文件加入暫存區準備提交
git add .
#add. 將所有已修改的文件添加到暫存區`

diff 查看提交差異

此命令可以查看你工作環境與你的暫存區的差異(git diff 默認的做法),你暫存區域與你最後提交之間的差異(git diff --staged),或者比較兩個提交記錄的差異(git diff master branchB)。

git diff $COMMIT1 $COMMIT2
#查看兩次提交之間的差異
git diff $BRANCH1 $BRANCH2
#查看分支差異:比較兩個分支之間的差異,可以查看哪些文件在兩個分支之間有不同

difftool 用外部工具來查看任意兩棵樹的差異

當你不想使用內置的 git diff 命令時。git difftool 可以用來簡單地啟動一個外部工具來為你展示兩棵樹之間的差異。

commit 提交變更

git commit 命令將所有通過 git add 暫存的文件內容在數據庫中創建一個持久的快照,然後將當前分支上的分支指針移到其之上。

git commit -m "commit message"
#提交已經加入暫存區的變更`
git commit -a -m "commit message"
#提交所有暫存區的變更`

reset 根據你傳遞給動作的參數來執行撤銷操作

它可以移動 HEAD 指針並且可選的改變 index 或者暫存區,如果你使用 --hard 參數的話你甚至可以改變工作區。 如果錯誤地為這個命令附加後面的參數,你可能會丟失你的工作,所以在使用前你要確定你已經完全理解了它。

git reset HEAD

branch 分支管理工具

git branch 命令實際上是某種程度上的分支管理工具。 它可以列出你所有的分支、創建新分支、刪除分支及重命名分支。

git  branch
#當前分支會有星號標記
git branch -a
#列出所有本地和遠端分支的清單
git branch $BRANCH
#建立新的分支
git branch -d $BRANCH
#刪除分支:刪除指定的分支

checkout 用來切換分支,或者檢出內容到工作目錄

git checkout 命令用來切換分支,或者檢出內容到工作目錄。

git checkout $BRANCH
#切換到指定的分支
git checkout -b $BRANCH
#建立新分支並同時切換至該新分支

merge 用來合併一個或者多個分支到你已經檢出的分支中

git merge 工具用來合併一個或者多個分支到你已經檢出的分支中。 然後它將當前分支指針移動到合並結果上。

git merge $BRANCH
#將一個分支的變更合併到當前分支。

mergetool 外部的合併幫助工具

當你在 Git 的合並中遇到問題時,可以使用 git mergetool 來啟動一個外部的合併幫助工具。

log 展示一個項目的歷史記錄

git log 命令用來展示一個項目的歷史記錄,從最近的提交快照起。 默認情況下,它只顯示你當前所在分支的歷史記錄,但是可以顯示不同的甚至多個頭記錄或分支以供遍歷。 此命令通常也用來在提交記錄級別顯示兩個或多個分支之間的差異。

git log
git log--all
#顯示提交歷史,包括提交的作者、日期和提交消息。加上--all,會列出Git存儲庫中的所有提交,包括所有分支和歷史紀錄。可以查看存儲庫的完整歷史和所有分支的提交紀錄。
git log --oneline --all --graph
#用圖形化方式看 log 資訊
git log old_tag_name..new_tag_name --pretty='%s' --reverse
#查看兩個 tag 或 commit 間增加了哪些 pr
git log 20200909..20200909-1 --pretty='%s' --reverse
#GitHub repo 設定中的 Allow merge commits 有打勾
git log 20200909-3..20200909-4 --pretty='%s' --reverse`GitHub repo 設定中的 Allow #merge commits 沒打勾

stash 用來臨時地保存一些還沒有提交的工作

以便在分支上不需要提交未完成工作就可以清理工作目錄。

git stash save -u "輸入要儲存的名稱,可寫中文"
#將手中的事情先藏起來 (非存到 add 或 commit 喔)
git stash list
#列出目前已儲存的 stash
git stash apply stash@{0}
#將 stash 中的 stash@{0} 抓下來,且不刪除 stash@{0}
git stash pop stash@{0}
#將 stash 中的 stash@{0} 抓下來,同時刪除 stash@{0}
git stash drop stash@{0
#刪除 stash 中的 stash@{0}

pull 從指定的遠程倉庫中抓取內容

git pull 命令基本上就是 git fetch 和 git merge 命令的組合體,Git 從你指定的遠程倉庫中抓取內容,然後馬上嘗試將其合並進你所在的分支中。

git pull origin $BRANCH
#從遠程儲存庫拉取指定分支的變更
git pull --rebase
#當要 push 發現上面已經有新的 commit 時,可用以下指令
#可能會有 conflict (檔案衝突),與對方確認哪些需保留,Local 解完衝突後,便能 git push`

push 將差異推送到另一個倉庫中

git push 命令用來與另一個倉庫通信,計算你本地數據庫與遠程倉庫的差異,然後將差異推送到另一個倉庫中。 它需要有另一個倉庫的寫權限,因此這通常是需要驗證的。

git push origin $BRANCH
#將本地分支的變更推送到遠程儲存

remote 遠程倉庫記錄的管理工具

它允許你將一個長的 URL 保存成一個簡寫的句柄,例如 origin ,這樣你就可以不用每次都輸入他們了。 你可以有多個這樣的句柄,git remote 可以用來添加,修改,及刪除它們。

git remote -v
#顯示與本地 Git 存儲庫關聯的遠程存儲庫的詳細信息,包括名稱和 UR

fetch 將遠程與當前倉庫差異抓取下來

git fetch 命令與一個遠程的倉庫交互,並且將遠程倉庫中有但是在當前倉庫的沒有的所有信息拉取下來然後存儲在你本地數據庫中。

archive 創建項目一個指定快照的歸檔文件

git archive 命令用來創建項目一個指定快照的歸檔文件。

show 顯示一個標簽或一個提交的信息

git show 命令可以以一種簡單的人類可讀的方式來顯示一個 Git 對象。 你一般使用此命令來顯示一個標簽或一個提交的信息。

shortlog 歸納 git log 的輸出的命令

git shortlog 是一個用來歸納 git log 的輸出的命令。 它可以接受很多與 git log 相同的選項,但是此命令並不會列出所有的提交,而是展示一個根據作者分組的提交記錄的概括性信息

describe 查找從提交可訪問的最新標記

git describe 命令用來接受任何可以解析成一個提交的東西,然後生成一個人類可讀的字符串且不可變。 這是一種獲得一個提交的描述的方式,它跟一個提交的 SHA-1 值一樣是無歧義,但是更具可讀性。

bisect debug 調試工具

git bisect 工具是一個非常有用的調試工具,它通過自動進行一個二分查找來找到哪一個特定的提交是導致 bug 或者問題的第一個提交。

blame 指出文件該段的最後變更者

git blame 命令標注任何文件的行,指出文件的每一行的最後的變更的提交及誰是那一個提交的作者。 當你要找那個人去詢問關於這塊特殊代碼的信息時這會很有用。

grep 幫助在源代碼中查找任何字符串或者正則表達式

Git 中的一些命令是以引入的變更即提交這樣的概念為中心的,這樣一系列的提交,就是一系列的補丁。 這些命令以這樣的方式來管理你的分支。

cherry-pick 獲得在單個提交中引入的變更

然後嘗試將作為一個新的提交引入到你當前分支上。 從一個分支單獨一個或者兩個提交而不是合並整個分支的所有變更是非常有用的。

rebase 是一個自動化的 cherry-pick 命令

它計算出一系列的提交,然後再以它們在其他地方以同樣的順序一個一個的 cherry-picks 出它們。

revert 逆向的 git cherry-pick 操作。

它將你提交中的變更的以完全相反的方式的應用到一個新創建的提交中,本質上就是撤銷或者倒轉。

rm 從工作區,或者暫存區移除文件的命令

在為下一次提交暫存一個移除操作上,它與 git add 有一點類似。

mv 移到一個文件並且在新文件上執行git add命令

git mv 命令是一個便利命令,用於移到一個文件並且在新文件上執行git add命令及在老文件上執行git rm命令。

clean 從工作區中移除不想要的文件的命令

可以是編譯的臨時文件或者合並沖突的文件。

tag 指定一個永久的書籤

git tag 命令用來為代碼歷史記錄中的某一個點指定一個永久的書簽。